package stack

type StackArr[V any] struct {
	index, size uint32
	data        []V
}

func NewStack[V any](size uint32) *StackArr[V] {
	return &StackArr[V]{
		size: size,
	}
}

func (s *StackArr[V]) Push(v V) bool {
	if s.index == s.size {
		return false
	}
	s.data[s.index] = v
	s.index++
	return true
}

func (s *StackArr[V]) Pop() (V, bool) {
	if s.index == 0 {
		return V(), false
	}
	s.index--
	data := s.data[s.index]
	return data, true
}

func (s *StackArr[V]) IsEmpty() bool {
	return s.index == 0
}
